Streaming data is a continuous flow of data that must be ultimately presented to a user in a particular sequence in real time. Digital samples representing an audio signal, for example, must be converted to a sound wave in the same sequence they were transmitted, and at exactly the time spacing they were generated, or some user-specified alternative. Digital data representing video frames require assembly into the proper sequence in the frame for presentation on a display together, and successive frames must display at the correct real-time rate.
Streaming data need not necessarily maintain correct sequence or timing throughout an entire communication chain among various transmitters, processors, memories, and receivers. Indeed, video and audio clips are frequently stored as static data in recording media, computer memories, and network buffers. Packet-switched systems might also carry parts of the same streaming data over different paths and even in different time sequences. Processors such as digital filters can assemble parts of the data stream, modify them as a static unit, then release them to further units in the system. Eventually, however, the stream must be heard or seen in the correct sequence at the proper relative times.
Streaming data almost always involves very large amounts of data. Streaming data almost always challenges the capacity of digital buses in computers to access it, carry it and switch it. Streaming data almost always taxes the processing power of functional units, both software and hardware, to receive it, convert it, and pass it on to other units. Those in the art speak of the necessity of “fat pipes” for streaming data.
Inefficiencies in reading and writing are especially deleterious in the handling of streaming data. These operations contribute nothing useful to processing the data. Yet the functional units that do perform useful work usually require movement of the data to and from a storage. Moreover, different kinds of streaming data usually require different kinds of processing by different hardware and/or software modules interconnected in different ways. No general-purpose computer, such as a personal computer, can afford to hard-wire all the necessary modules in a dedicated configuration for any one type of such data. This fact increases the need for intermediate storage, and thus for reading and writing operations.
An abstract model has been developed to represent the connections among various facilities in a computer that are required to process a given type of streaming data. For example, a video clip might require MPEG decoding in a dedicated chip, rasterizing the video fields in another hardware module, digital filtering of the audio in a software module, insertion of subtitles by another software module, D/A conversion of the video in a video adapter card, and D/A conversion of the audio in a separate audio card. A number of different types of memory in different locations can store the data between successive operations, and a number of buses can be made available to transport the data.
An architecture called WDM-CSA (Windows Driver Model Connection and Streaming Architecture) introduces the concept of a graph for specifying the connections among the facilities of a computer where a data stream must pass through a number of processing units in an efficient manner. The WDM-CSA protocol also simplifies the development of drivers for such data. Basically, WDM-CSA specifies the flow of data frames through a graph, and also the control protocols by which adjacent modules in the graph communicate with each other to request and accept the data frames. Heretofore, however, streaming graphs have been used improve the actual data flow only to the extent of reducing inter-buffer data transfers between adjacent functional units in the graph. Global improvement of the entire data flow over the graph has not been attempted. Accordingly, a need remains for further efficiencies in processing streaming and related kinds of data using a connection graph, by increasing the overall speed of data flowing through the graph, by reducing the systems resources usage, and/or by satisfying formal goals and constraints specified by the graph's client.